package com.bjpowernode.dataservice.mapper;

import com.bjpowernode.api.dto.ProductBidInfo;
import com.bjpowernode.api.dto.ProductIncomeInfo;
import com.bjpowernode.api.model.Product;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

public interface ProductMapper {

    /**
     * 根据产品类型查询产品
     * @param type 产品类型
     * @param offset pageNo 第几页
     * @param rows pageSize 查询的条数
     * @return 具体产品的列表
     */
    List<Product> queryProductByType(@Param("type") Integer type,
                                     @Param("offset") Integer offset,
                                     @Param("rows") Integer rows);

    BigDecimal getAverageRate();

    int deleteByPrimaryKey(Integer id);

    int insert(Product record);

    int insertSelective(Product record);

    Product selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Product record);

    int updateByPrimaryKey(Product record);

    /**
     * 获取
     * @param productType
     * @return
     */
    Integer countByType(Integer productType);

    /**
     * 根据用户uid分页查询用户信息
     * @param uid
     * @param offset
     * @param rows
     * @return
     */
    List<ProductBidInfo> selectProductBidInfoByUid(@Param("uid") Integer uid, @Param("offset") Integer offset, @Param("rows") Integer rows);

    /**
     * 根据用户id分页带条件查询用户收益信息
     * @param uid 用户id
     * @param offset 第几页
     * @param limit 限制每页记录数
     * @return ProductIncomeInfo
     */
    List<ProductIncomeInfo> selectProductIncomeInfoByUid(@Param("uid") Integer uid, @Param("offset") int offset, @Param("limit") int limit);

    /**
     * 修改产品剩余可投资金额
     * @param pid 产品id
     * @param money 扣除金额
     * @return 是否修改成功
     */
    int updateLeftMoney( @Param("pid") Integer pid, @Param("money") BigDecimal money);

    /**
     * 查询时间范围内满标的产品
     * @param beginDate 起始时间
     * @param endDate 结束时间
     * @return
     */
    List<Product> selectManBiaoList(@Param("beginDate") Date beginDate, @Param("endDate") Date endDate);

    /**
     * 更新产品状态
     * @param productId 产品id
     * @param status 产品状态
     * @return 受影响行数
     */
    int updateStatus(@Param("productId") Integer productId, @Param("status") int status);
}